﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ClienteWinMGI.Logica;
using ComunesMGI.DataTypes;
using System.Collections;

namespace ClienteWinMGI.Presentacion
{
    public partial class GestionControl : UserControl
    {

        private DataCliente _cliente;
        private DataSistema _sistema;
        private List<DataWP> _workPackages;
        

        public GestionControl()
        {
            InitializeComponent();
            //cargo el combo con los clientes.
            cargarClientes();
        }

        public DataCliente Cliente
        { 
            get{ return _cliente; }
        }
        public DataSistema Sistema
        {
            get { return _sistema; }
        }

        public List<DataWP> WorkPackages
        {
            set { _workPackages = value; }
            get { return _workPackages; }
        }
        private void cargarClientes()
        {

            IClientes iClientes = LogicaFactory.getInstance().getIClientes();
            List<DataCliente> listaClientes = iClientes.getClientes();
            foreach (DataCliente dc in listaClientes)
            {
                cboCliente.Items.Add(dc.Nombre);
            }
            cboCliente.SelectedIndex = -1;

        }

        private void buttonAgregar_Click(object sender, EventArgs e)
        {
            AltaIncidente _altaIncidente = new AltaIncidente();
            _altaIncidente.ShowDialog();
        }

        private void label7_Click(object sender, EventArgs e)
        {

        }

        private void dataGridWP_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
           
        }

        private void dataGridViewIncidentes_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void cboCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboCliente.SelectedIndex != -1)
            {
                //vacio el combo de los sistemas
                cboSistema.Items.Clear();

                string nombreCliente = cboCliente.SelectedItem.ToString();
                _cliente = new DataCliente(nombreCliente);
                LogicaFactory fabrica = LogicaFactory.getInstance();
                ISistemas sist = fabrica.getISistemas();
                List<DataSistema> lista = sist.getSistemas(_cliente);
                int largo = lista.Count();
                for (int i = 0; i < lista.Count(); i++)
                {
                    DataSistema dataSist = lista[i];
                    string item = " Nombre=" + dataSist.Nombre + ";" + "Sitio=" + dataSist.Sitio;
                    cboSistema.Items.Add(item);
                }

                _sistema = null; 
                cboSistema.SelectedIndex = -1;
                cboSistema.Enabled = true;
                
                //vacio la grilla
                dataGridWP.DataSource = null;

                
            }  
           
        }

        private void cboSolucion_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboSistema.SelectedIndex != -1)
            {
                string datoSistema = cboSistema.SelectedItem.ToString();
                char[] delimitador = { '=', ';' };

                string[] palabras = datoSistema.Split(delimitador);
                string nombre = palabras[1];
                string sitio = palabras[3];
                _sistema = new DataSistema(nombre, sitio);

                //vacio la grilla
                dataGridWP.DataSource = null;
            }

        }
        private DataTable obtenerDatosTabla(DataCliente cli, DataSistema sis)
        {
            IIncidentes ii = LogicaFactory.getInstance().getIIncidentes();
            List<DataWP> listaWp = ii.getWorkPackages(_cliente, _sistema);
            _workPackages = listaWp;
            //creo el datatable para cargarselo despues como datasource de la grilla
            DataTable datosTabla = new DataTable("tablaWP");
            datosTabla.Columns.Add("Nombre", typeof(string));
            datosTabla.Columns.Add("Estado", typeof(string));
            string nombreWP;
            string estadoWP;
            foreach (DataWP dp in listaWp)
            {
                nombreWP = dp.Nombre;
                estadoWP = dp.Estado.Estado;
                DataRow dataR = datosTabla.NewRow();
                dataR[0] = nombreWP;
                dataR[1] = estadoWP;
                datosTabla.Rows.Add(dataR);
               
            }
          
            return datosTabla;
        }
        private void btnActualizar_Click(object sender, EventArgs e)
        {
            if (_cliente != null && _sistema != null)
            {
                DataTable datosTabla = obtenerDatosTabla(_cliente, _sistema);
                dataGridWP.DataSource = datosTabla;
            }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            AltaWorkPackage altaWp = new AltaWorkPackage();
            altaWp.ShowDialog();
            cboCliente.SelectedIndex = -1;
            _cliente = null;
            cboSistema.Items.Clear();
            cboSistema.SelectedIndex = -1;
            cboSistema.Enabled = false;
            _sistema = null;
            _workPackages = null;
            dataGridWP.DataSource = null;
            

            
        }

        private void button2_Click(object sender, EventArgs e)
        {

        }


        /// <summary>
        /// devuelve el indice en la lista de work packages del workpackage seleccionado, si es que se
        /// selecciono alguno, sino devuelve -1
        /// </summary>
        /// <returns>integer</returns>
        private int obtenerIndiceWPSeleccionado()
        {
            DataGridViewSelectedRowCollection col = dataGridWP.SelectedRows;
            bool salir = false;
            int i = 0;
            while (!salir && i < dataGridWP.RowCount)
            {
                DataGridViewRow fila = dataGridWP.Rows[i];
                if (col.Contains(fila))
                {
                    salir = true;

                }
                else
                {
                    i++;
                }
            }
            if (salir)
                return i;
            else
                return -1;
        }

        private void btnAsignarInc_Click(object sender, EventArgs e)
        {
            int i= obtenerIndiceWPSeleccionado();
            if(i>=0){

                DataWP datosWP = _workPackages.ElementAt(i);
                AsignarIncidentesWP asignacion = new AsignarIncidentesWP(_cliente, _sistema, datosWP);
                asignacion.ShowDialog();
            }
            else {
                Error er = new Error("Error", "Debe seleccionar un dato", "Para poder asignar incidentes a un workPackage debe seleccionar un work package de la lista");
                er.ShowDialog();
            }

        }

        private void buttonActualizar_Click(object sender, EventArgs e)
        {

        }

        private void btnVisualizar_Click(object sender, EventArgs e)
        {
            if (_sistema != null)
            {
                int i = obtenerIndiceWPSeleccionado();
                if (i >= 0)
                {

                    DataWP datosWP = _workPackages.ElementAt(i);
                    VisualizarWP visualizar = new VisualizarWP(datosWP, _sistema);
                    visualizar.ShowDialog();
                }
                else
                {
                    Error er = new Error("Error", "Debe seleccionar un Work Package", "Seleccione un Work Package para visualizar");
                    er.ShowDialog();
                }
            }
            else
            {
                Error er = new Error("Error", "Debe seleccionar un sistema", "Seleccione un sistema para poder ver la informacion de un Work Package");
                er.ShowDialog();
            }

        }

        private void button4_Click(object sender, EventArgs e)
        {

        }

    }
}
